home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmiSoft / Dev / misc / WHDLoad_dev.lha / WHDLoad / Src / slave-examples / newyorkwarriors.asm < prev    next >
Encoding:
Assembly Source File  |  2001-11-23  |  9.7 KB  |  503 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    newyorkwarriors.asm
  3. ;  :Contents.    Slave for "New York Warriors" from Arcadia Systems
  4. ;  :Author.    Wepl
  5. ;  :Original    v1 sascha steinert
  6. ;        v2 chris vella
  7. ;  :Version.    $Id: newyorkwarriors.asm 1.3 2001/11/22 20:25:27 wepl Exp wepl $
  8. ;  :History.    30.08.01 started
  9. ;        09.09.01 support for v2 added
  10. ;        21.11.01 more bugs fixed
  11. ;        22.11.01 finished
  12. ;  :Requires.    -
  13. ;  :Copyright.    Public Domain
  14. ;  :Language.    68000 Assembler
  15. ;  :Translator.    Devpac 3.14, Barfly 2.9
  16. ;  :To Do.
  17. ;---------------------------------------------------------------------------*
  18.  
  19.     INCDIR    Includes:
  20.     INCLUDE    whdload.i
  21.     INCLUDE    whdmacros.i
  22.     INCLUDE    lvo/intuition.i
  23.  
  24.     IFD BARFLY
  25.     OUTPUT    "wart:n/newyorkwarriors/NewYorkWarriors.Slave"
  26.     BOPT    O+                ;enable optimizing
  27.     BOPT    OG+                ;enable optimizing
  28.     BOPT    ODd-                ;disable mul optimizing
  29.     BOPT    ODe-                ;disable mul optimizing
  30.     BOPT    w4-                ;disable 64k warnings
  31.     SUPER
  32.     ENDC
  33.  
  34. _hadr    = $120
  35. _allocmem = $124
  36. MEMLOG    = 0
  37.  
  38. ;============================================================================
  39.  
  40. CHIPMEMSIZE    = $ff000
  41. FASTMEMSIZE    = $00000
  42. NUMDRIVES    = 1
  43. WPDRIVES    = %1111
  44.  
  45. BLACKSCREEN
  46. ;DISKSONBOOT
  47. ;HRTMON
  48. ;MEMFREE    = $130
  49. ;NEEDFPU
  50. ;SETPATCH
  51.  
  52. ;============================================================================
  53.  
  54. KICKSIZE    = $40000            ;34.005
  55. BASEMEM        = CHIPMEMSIZE
  56. EXPMEM        = KICKSIZE+FASTMEMSIZE
  57.  
  58. ;============================================================================
  59.  
  60. _base        SLAVE_HEADER            ;ws_Security + ws_ID
  61.         dc.w    13            ;ws_Version
  62.         dc.w    WHDLF_EmulPriv|WHDLF_NoError    ;ws_flags
  63.         dc.l    BASEMEM            ;ws_BaseMemSize
  64.         dc.l    0            ;ws_ExecInstall
  65.         dc.w    _start-_base        ;ws_GameLoader
  66.         dc.w    _data-_base        ;ws_CurrentDir
  67.         dc.w    0            ;ws_DontCache
  68. _keydebug    dc.b    0            ;ws_keydebug
  69. _keyexit    dc.b    $59            ;ws_keyexit = F10
  70. _expmem
  71.     IFNE MEMLOG
  72.         dc.l    EXPMEM+$10000        ;ws_ExpMem
  73.     ELSE
  74.         dc.l    EXPMEM            ;ws_ExpMem
  75.     ENDC
  76.         dc.w    _name-_base        ;ws_name
  77.         dc.w    _copy-_base        ;ws_copy
  78.         dc.w    _info-_base        ;ws_info
  79.  
  80. ;============================================================================
  81.  
  82.     IFD BARFLY
  83.     DOSCMD    "WDate  >T:date"
  84.     ENDC
  85.  
  86. _name        dc.b    "New York Warriors",0
  87. _copy        dc.b    "1990 Arcadia Systems",0
  88. _info        dc.b    "adapted and fixed by Wepl",10
  89.         dc.b    "Version 1.1 "
  90.     IFD BARFLY
  91.         INCBIN    "T:date"
  92.     ENDC
  93.         dc.b    0
  94. _data        dc.b    "data",0
  95. _main        dc.b    "z",0
  96. _highs        dc.b    "highs",0
  97. _intname    dc.b    "intuition.library",0
  98.     EVEN
  99.  
  100. ;============================================================================
  101. _start    ;    A0 = resident loader
  102. ;============================================================================
  103.  
  104.     IFEQ 1
  105.         sub.l    #$1000,a7
  106.         move.l    a0,a2
  107.         lea    _ny,a0
  108.         lea    $1000,a1
  109.         jsr    (resload_LoadFileDecrunch,a2)
  110.         lea    $1000,a0
  111.         sub.l    a1,a1
  112.         jsr    (resload_Relocate,a2)
  113.     mc68020
  114.         movec    vbr,a0
  115.         lea    _trace,a1
  116.         move.l    a1,$24(a0)
  117.         move    #$a700,sr
  118.         jmp    $104e
  119.  
  120. _trace        ;cmp.w    #-1,d7
  121.         ;beq    _ill
  122.         cmp.l    #$1126,(2,a7)
  123.         beq    _f1
  124.         cmp.l    #$1148,(2,a7)
  125.         beq    _ill
  126.         nop
  127.         rte
  128. _f1        move.l    d2,d3
  129.         add.l    #2,(2,a7)
  130.         rte
  131. _ill        illegal
  132.  
  133. _ny        dc.b    "newyork",0
  134.     ENDC
  135.  
  136.     ;initialize kickstart and environment
  137.         bra    _boot
  138.  
  139. _bootearly    move.l    (_resload,pc),a2    ;a2 = resload
  140.  
  141.     ;enable cache
  142.     ;    move.l    #WCPUF_Base_NC|WCPUF_Exp_NC|WCPUF_Slave_CB|WCPUF_IC|WCPUF_DC|WCPUF_BC|WCPUF_SS|WCPUF_SB|WCPUF_NWA,d0
  143.     ;    move.l    #0,d0
  144.     ;    move.l    #WCPUF_All,d1
  145.     ;    jsr    (resload_SetCPU,a2)
  146.  
  147.         lea    _intname,a1
  148.         move.l    (4),a6
  149.         jsr    (_LVOOldOpenLibrary,a6)
  150.         move.l    d0,a6
  151.         lea    _newscreen,a0
  152.         jsr    (_LVOOpenScreen,a6)
  153.  
  154.         move.l    #54200,d0
  155.         moveq    #MEMF_CHIP,d1
  156.         move.l    (4),a6
  157.         jsr    (_LVOAllocMem,a6)
  158.         move.l    d0,a5            ;a5 = main
  159.  
  160.         lea    (_main),a0
  161.         move.l    a5,a1
  162.         jsr    (resload_LoadFileDecrunch,a2)
  163.         
  164.         move.l    a5,a0
  165.         sub.l    a1,a1
  166.         jsr    (resload_Relocate,a2)
  167.         
  168.         lea    _pl1,a0
  169.         lea    $af94,a1
  170.         lea    _go1,a4
  171.         cmp.l    #$4efa02a6,(a5)
  172.         beq    .ok
  173.         lea    _pl2,a0
  174.         lea    $bbd8,a1
  175.         lea    (a5),a4
  176.         cmp.l    #$4efa04c6,(a5)
  177.         beq    .ok
  178.         pea    TDREASON_WRONGVER
  179.         jmp    (resload_Abort,a2)
  180.  
  181. .ok        add.l    a5,a1
  182.         move.l    a1,_hadr
  183.         move.l    a5,a1
  184.         jsr    (resload_Patch,a2)
  185.         
  186.         lea    _highs,a0
  187.         jsr    (resload_GetFileSize,a2)
  188.         tst.l    d0
  189.         beq    .nohighs
  190.         lea    _highs,a0
  191.         move.l    _hadr,a1
  192.         jsr    (resload_LoadFileDecrunch,a2)
  193.         bsr    _crypt
  194. .nohighs
  195.         clr.l    -(a7)
  196.         pea    (a5)
  197.         pea    WHDLTAG_DBGADR_SET
  198.         move.l    a7,a0
  199.         jsr    (resload_Control,a2)
  200.  
  201.     IFEQ MEMLOG
  202.         move.l    (4),a0
  203.         move.l    (_LVOAllocMem+2,a0),(_allocmem)
  204.         pea    _allocfix
  205.         move.l    (a7)+,(_LVOAllocMem+2,a0)
  206.     ELSE
  207.     move.l    _expmem,a1
  208.     add.l    #KICKSIZE,a1
  209.     pea    ($10,a1)
  210.     move.l    (a7)+,(a1)+
  211.     move.l    4,a0
  212.     move.l    _LVOAllocMem+2(a0),(a1)+
  213.     move.l    _LVOFreeMem+2(a0),(a1)+
  214.     move.l    _LVOAvailMem+2(a0),(a1)+
  215.     pea    .alloc
  216.     move.l    (a7)+,_LVOAllocMem+2(a0)
  217.     pea    .free
  218.     move.l    (a7)+,_LVOFreeMem+2(a0)
  219.     pea    .avail
  220.     move.l    (a7)+,_LVOAvailMem+2(a0)
  221.     bra    .xxx
  222. .alloc    move.l    _expmem,a0
  223.     add.l    #KICKSIZE,a0
  224.     add.l    #16,(a0)
  225.     sub.l    #4,a7
  226.     pea    .ret
  227.     move.l    (4,a0),-(a7)
  228.     move.l    (a0),a0
  229.     move.l    a0,(8,a7)
  230.     move.l    (12,a7),(-16,a0)
  231.     move.b    #"A",(-16,a0)
  232.     move.l    d0,(-12,a0)
  233.     move.l    d1,(-8,a0)
  234.     rts
  235. .free    move.l    _expmem,a0
  236.     add.l    #KICKSIZE,a0
  237.     add.l    #16,(a0)
  238.     sub.l    #4,a7
  239.     pea    .ret
  240.     move.l    (8,a0),-(a7)
  241.     move.l    (a0),a0
  242.     move.l    a0,(8,a7)
  243.     move.l    (12,a7),(-16,a0)
  244.     move.b    #"F",(-16,a0)
  245.     move.l    d0,(-12,a0)
  246.     move.l    a1,(-8,a0)
  247.     rts
  248. .avail    move.l    _expmem,a0
  249.     add.l    #KICKSIZE,a0
  250.     add.l    #16,(a0)
  251.     sub.l    #4,a7
  252.     pea    .ret
  253.     move.l    (12,a0),-(a7)
  254.     move.l    (a0),a0
  255.     move.l    a0,(8,a7)
  256.     move.l    (12,a7),(-16,a0)
  257.     move.b    #"V",(-16,a0)
  258.     move.l    d1,(-12,a0)
  259.     rts
  260. .ret    move.l    (a7)+,a0
  261.     move.l    d0,-(a0)
  262.     rts
  263. .xxx
  264.     ENDC
  265.         sub.l    a0,a0            ;cli argument string
  266.         jsr    (a4)
  267.         illegal
  268.         
  269. _go1        move.w    #0,d0            ;start level? but does not work...
  270.         move.l    a5,a4
  271.         add.l    #$ab0c+$7ffe,a4
  272.         jmp    ($2c2,a5)
  273.  
  274. _pl1    PL_START
  275.     PL_S    $d26,$32-$26        ;open doslib
  276.     PL_PS    $30,_load1
  277.     PL_PS    $4a,_load2
  278.     PL_S    $82ce,$dc-$ce
  279.     PL_P    $82e0,_load3
  280.     PL_R    $6282            ;insert disk 2
  281.     PL_PS    $1654,_loadseg
  282.     PL_PS    $17da,_unloadseg
  283.     PL_P    $82f8,_open
  284.     PL_P    $8310,_seek
  285.     PL_P    $8328,_read
  286.     PL_P    $8340,_close
  287.     PL_PS    $1e06,_f1v1
  288.     PL_S    $cae,$cc6-$cae        ;cia accesses
  289.     PL_PS    $5842,_b1
  290.     PL_P    $6abe,_saveh
  291.     PL_PS    $574a,_b2
  292.     PL_PS    $169c,_f2
  293.     PL_END
  294.  
  295. _pl2    PL_START
  296.     PL_S    $8,$20-$8        ;always allocate MEMF_ANY
  297.     PL_S    $78,$90-$78        ;loading 'static0'
  298.     PL_PS    $9a,_load4        ;loading 'static0'
  299.     PL_S    $124,2            ;loading 'segment?'
  300.     PL_S    $128,$140-$128        ;loading 'segment?'
  301.     PL_PS    $144,_load4        ;loading 'segment?'
  302.     PL_S    $15c,$162-$15c        ;loading 'segment?'
  303.     PL_S    $28c,$2aa-$28c        ;loading 'nyw2:#?'
  304.     PL_PS    $2b4,_load4        ;loading 'nyw2:#?'
  305.     PL_R    $efc            ;cia access
  306.     PL_S    $f5c,$32-$26        ;open doslib
  307.     PL_PS    $192e,_loadseg2
  308.     PL_PS    $1976,_f2
  309.     PL_PS    $1ab4,_unloadseg
  310.     PL_PS    $210a,_f1v2
  311.     PL_PS    $6180,_b2
  312.     PL_PS    $63f8,_b1
  313.     PL_R    $6e82            ;insert disk 2
  314.     PL_P    $76fc,_saveh
  315.     ;PL_S    $82ce,$dc-$ce
  316.     ;PL_P    $82e0,_load3
  317.     PL_S    $8e2e,2            ;dont reduce mem for instruments
  318.     PL_P    $8f10,_open
  319.     PL_P    $8f28,_seek
  320.     PL_P    $8f40,_read
  321.     PL_P    $8f58,_close
  322.     PL_END
  323.  
  324.     ;game does not test return value correctly!
  325. _allocfix    pea    .1
  326.         move.l    (_allocmem),-(a7)
  327.         rts
  328. .1        tst.l    d0
  329.         rts
  330.  
  331. _load4        move.l    a2,-(a7)
  332.         move.l    d2,a1
  333.         move.l    _resload,a2
  334.         jsr    (resload_LoadFileDecrunch,a2)
  335.         move.l    (a7)+,a2
  336.         addq.l    #4,(a7)
  337.         rts
  338.  
  339. _f2        subq.w    #1,d0
  340. .lp        move.w    (a1)+,(a0)+
  341.         dbf    d0,.lp
  342.         rts
  343.  
  344. _saveh        bsr    _crypt
  345.         move.l    #$b00c-$af94,d0
  346.         lea    _highs,a0
  347.         move.l    _hadr,a1
  348.         move.l    _resload,a2
  349.         jsr    (resload_SaveFile,a2)
  350.         bsr    _crypt
  351.         movem.l    (a7)+,d2-d7/a2-a3/a5
  352.         rts
  353.  
  354. _crypt        movem.l    d0/a1,-(a7)
  355.         move.l    _hadr,a1
  356.         move.l    #$b00c-$af94-1,d0
  357. .lp        eor.b    d0,(a1)+
  358.         dbf    d0,.lp
  359.         movem.l    (a7)+,d0/a1
  360.         rts
  361.  
  362. _b2        move.l    (a0)+,d2
  363.         and.l    #$fffff,d2
  364.         move.l    d2,(bltbpt,a3)
  365.         move.l    (a0)+,(bltcpt,a3)
  366.         add.l    #2,(a7)
  367.         rts
  368.  
  369. _b1        BLITWAIT
  370.         move.l    a1,(a5)
  371.         move.l    d1,(a3)
  372.         rts
  373.  
  374. _f1v1        cmp.l    #0,a5
  375.         bne    .ok
  376. .1        add.l    #$1e64-$1e06-6,(a7)
  377.         rts
  378. .ok        cmp.l    (-4,a5),a3
  379.         bne    .1
  380.         rts
  381. _f1v2        cmp.l    #0,a5
  382.         bne    .ok
  383. .1        add.l    #$216c-$210a-6,(a7)
  384.         rts
  385. .ok        cmp.l    (-4,a5),a3
  386.         bne    .1
  387.         rts
  388.  
  389. _open        movem.l    d1/a1/a6,-(a7)
  390.         move.l    4,a6
  391.         moveq    #8,d0
  392.         moveq    #0,d1
  393.         jsr    (_LVOAllocMem,a6)
  394.         move.l    d0,a0
  395.         clr.l    (a0)+
  396.         move.l    (a7)+,(a0)
  397.         movem.l    (a7)+,a1/a6
  398.         rts
  399. _seek        move.l    d1,a0
  400.         move.l    (a0),d0
  401.         tst.w    d3
  402.         beq    .cur
  403.         cmp.w    #1,d3
  404.         beq    .end
  405. .beg        move.l    d2,(a0)
  406.         rts
  407. .cur        add.l    d2,(a0)
  408.         rts
  409. .end        movem.l    d0-d1/a0,-(a7)
  410.         move.l    d2,(a0)+
  411.         move.l    (a0),a0
  412.         move.l    _resload,a1
  413.         jsr    (resload_GetFileSize,a1)
  414.         move.l    (8,a7),a0
  415.         add.l    d0,(a0)
  416.         movem.l    (a7)+,d0-d1/a0
  417.         rts
  418. _read        move.l    d1,a1
  419.         movem.l    d1/a1-a2,-(a7)
  420.         move.l    (a1)+,d1    ;offset
  421.         move.l    (a1),a0        ;filename
  422.         move.l    d2,a1        ;buffer
  423.         move.l    d3,d0        ;length
  424.         move.l    _resload,a2
  425.         jsr    (resload_LoadFileOffset,a2)
  426.         movem.l    (a7)+,d1/a1-a2
  427.         add.l    d3,(a1)
  428.         move.l    d3,d0
  429.         rts
  430. _close        move.l    a6,-(a7)
  431.         move.l    d1,a1
  432.         move.l    #8,d0
  433.         move.l    4,a6
  434.         jsr    (_LVOFreeMem,a6)
  435.         move.l    (a7)+,a6
  436.         rts
  437.  
  438. _load1        move.l    d1,a1        ;filename
  439.         rts
  440. _load2        move.l    a2,-(a7)
  441.         move.l    _resload,a2
  442.         move.l    a1,a0
  443.         move.l    d2,a1
  444.         jsr    (resload_LoadFileDecrunch,a2)
  445.         move.l    d0,d2
  446.         move.l    (a7)+,a2
  447.         add.l    #6,(a7)
  448.         rts
  449. _load3        move.l    _resload,a2
  450.         move.l    d2,a1
  451.         jsr    (resload_LoadFileDecrunch,a2)
  452.         move.l    d0,d1
  453.         movem.l    (a7)+,d2-d4/a2
  454.         rts
  455.  
  456. _loadseg2    addq.l    #5,a0            ;skip "NYW2:"
  457. _loadseg    move.l    a0,-(a7)
  458.         move.l    #16508,d0        ;max len of 'object?'
  459.         move.l    d0,-(a7)
  460.         moveq    #0,d1
  461.         move.l    (4),a6
  462.         jsr    (_LVOAllocMem,a6)
  463.         move.l    d0,a2
  464.         move.l    (a7)+,(a2)
  465.         move.l    (a7)+,a0
  466.         lea    (4,a2),a1
  467.         move.l    _resload,a6
  468.         jsr    (resload_LoadFileDecrunch,a6)
  469.         lea    (4,a2),a0
  470.         sub.l    a1,a1
  471.         jsr    (resload_Relocate,a6)
  472.         move.l    a2,d0
  473.         lsr.l    #2,d0
  474.         rts
  475. _unloadseg    lsl.l    #2,d1
  476.         move.l    d1,a1
  477.         move.l    (a1),d0
  478.         move.l    (4),a6
  479.         jsr    (_LVOFreeMem,a6)
  480.         addq.l    #2,(a7)
  481.         rts
  482.  
  483. _newscreen    dc.w    0        ;LeftEdge
  484.         dc.w    0        ;TopEdge
  485.         dc.w    320        ;Width
  486.         dc.w    -1        ;Height
  487.         dc.w    1        ;Depth
  488.         dc.b    0,0        ;DetailPen,BlockPen
  489.         dc.w    0        ;ViewModes
  490.         dc.w    $10f        ;Type
  491.         dc.l    0        ;Font
  492.         dc.l    0        ;Title
  493.         dc.l    0        ;Gadgets
  494.         dc.l    0        ;CustomBitmap
  495.  
  496. ;============================================================================
  497.  
  498.     INCLUDE    Sources:whdload/kick13.s
  499.  
  500. ;============================================================================
  501.  
  502.     END
  503.